// package cn.cycleif.component.log;
//
// import cn.cycleif.pojo.entity.Visit;
// import cn.cycleif.pojo.entity.Visitor;
// import cn.cycleif.pojo.vo.Result;
// import cn.cycleif.service.VisitService;
// import cn.cycleif.service.VisitorService;
// import jakarta.servlet.http.HttpServletRequest;
// import lombok.RequiredArgsConstructor;
// import lombok.extern.slf4j.Slf4j;
// import org.aspectj.lang.ProceedingJoinPoint;
// import org.aspectj.lang.annotation.Around;
// import org.aspectj.lang.annotation.Aspect;
// import org.aspectj.lang.annotation.Pointcut;
// import org.springframework.stereotype.Component;
//
// import java.time.LocalDateTime;
//
// /**
//  * &#064;Date: 24/05/16-15:17
//  * &#064;Description: 在公开接口或使用AutoLog注解的接口被访问时创建记录
//  */
// @Aspect
// @Component
// @Slf4j
// @RequiredArgsConstructor
// public class AccessLogAspect {
//   private final HttpServletRequest request;
//   private final VisitorService     visitorService;
//   private final VisitService       visitService;
//
//   @Pointcut("@annotation(cn.cycleif.component.log.AccessLog) || @within(cn.cycleif.component.log.AccessLog)")
//   public void autoLogPointCut() {
//   }
//
//   @Around("autoLogPointCut()")
//   public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
//     log.info("记录访问日志");
//     Object result = joinPoint.proceed();
//
//     String  ip      = request.getRemoteAddr();
//     Visitor visitor = visitorService.queryByIp(ip);
//     if (visitor == null) {
//       visitor = new Visitor();
//       visitor.setIpAddress(ip);
//       visitor.setUserAgent(request.getHeader("User-Agent"));
//       visitor.setCreateTime(LocalDateTime.now());
//       visitorService.save(visitor);
//     }
//     Visit visits = new Visit();
//     visits.setUrl(request.getRequestURL().toString());
//     visits.setVisitorId(visitor.getId());
//     visits.setStatusCode(((Result<?>) result).getCode());
//     visits.setCreateTime(LocalDateTime.now());
//     visitService.save(visits);
//     return result;
//   }
// }
